char ssid[] = "ssid-site"; //SSID WiFi site
char pwd[] = "heslo-site"; //heslo site

String cmd; //retezec pro ukladani a skladani prikazu 
String http;

void setup(){
    Serial.begin(9600);
    Serial3.begin(9600); //9600, 57600, 115200

    cmd = "AT";
    command(cmd, "Zkousim pritomnost modulu", "Modul komunikuje", "Modul nekomunikuje", "OK", 3000);

    cmd = "AT+RST";
    command(cmd, "Restartuji modul", "Modul restartovan", "Modul se nepovedlo restartovat", "ready", 5000);
    
    cmd = "AT+CIPMUX=1";
    command(cmd, "Nastavuji vicenasobne pripojeni", "Nastaveno", "Nepovedlo se nastavit", "OK", 1000);

    cmd = "AT+CWMODE=2";
    command(cmd, "Nastavuji AP mod", "Nastaveno", "Nepovedlo se nastavit", "OK", 2000);

    cmd = "AT+CWSAP=\"ESP-WIFI\",\"12345678\",11,2";
    command(cmd, "Vytvarim pristupovy bod", "Vytvoreno", "Nepovedlo se vytvorit pristupovy bod", "OK", 3000);
    
    cmd = "AT+CIPSERVER=1";
    command(cmd, "Vytvarim server", "Vytvoreno", "Nepovedlo se vytvorit server", "OK", 2000); 

    cmd = "AT+CIFSR";
    command(cmd, "Zjistuji aktualni adresu", "", "", "", 2000);
}

void loop(){
    if(waitFor("+IPD", 50)){ //hledej vyskyt +IPD
        Serial3.parseInt(); //jedno cislo zahod
        Serial3.parseInt(); //druhe cislo zahod
        int p = Serial3.parseInt(); //precti treti cislo

        Serial.print("Nacetl jsem: ");
        Serial.println(p);
        
        Serial3.flush(); //zbytek zpravy me ted nezajima, zahod ho
    }
    
    resendData();
}

boolean command(String cmd, String comment, String success, String unsuccess, char *waitForString, long waitingTime){
    Serial.println();
    Serial.println(comment);
    Serial.println("] " + cmd);
    Serial3.println(cmd);
    boolean result = waitFor(waitForString, waitingTime);
    if(result){
        Serial.println("[ " + success);
    }
    else{
        Serial.println("[ " + unsuccess);    
    }
    resendData();

    return result;
}

boolean waitFor(char *s, long waitingTime){
    Serial3.setTimeout(waitingTime);
    return Serial3.find(s);
}

boolean resendData(){
    while(Serial.available()){
        Serial3.write(Serial.read());    
    }

    if(Serial3.available()){
        while(Serial3.available()){
            Serial.write(Serial3.read());
        }
    }    
}